//package com.xb.system.service.impl;
//
//import com.xb.model.domain.Users;
//import com.xb.system.constants.BatchConstants;
//import com.xb.system.constants.ThreadPoolManager;
//import com.xb.system.service.DynamicDataSplitterService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.List;
//
//
//@Slf4j
//@Component
//public class DoubleBufferBatchProcessor {
//
//    @Value("${file.batch.size}")
//    private int batchSize;
//
//    @Value("${file.thread.pool.size}")
//    private int threadPoolSize;
//
//    @Resource
//    private DynamicDataSplitterService dynamicDataSplitterService;
//
//
//    @PostConstruct
//    public void init() {
//        // 在依赖注入完成后初始化线程池
//        ThreadPoolManager.getExecutor(threadPoolSize);
//
//        // 启动一个异步线程监听批处理队列
//        Thread processorThread = new Thread(this::processBatches);
//        processorThread.setDaemon(true);
//        processorThread.start();
//    }
//
//    private void processBatches() {
//        while (true) {
//            //入库操作就交个这个类处理了
//            processBuffer(BatchConstants.BATCH_BUFFER_1);
//            processBuffer(BatchConstants.BATCH_BUFFER_2);
//
//            try {
//                Thread.sleep(200); // 适当的等待时间，避免CPU空转
//            } catch (InterruptedException e) {
//                log.error("批处理线程被中断", e);
//                Thread.currentThread().interrupt();
//            }
//        }
//    }
//
//    private void processBuffer(List<Users> buffer) {
//        synchronized (buffer) {
//            if (buffer.size() >= batchSize) {
//                List<Users> batchToSave = new ArrayList<>(buffer);
//                buffer.clear();
//                processingSmallData(batchToSave);
//                buffer.notifyAll(); // 唤醒等待的线程
//            }
//        }
//    }
//
//    public void processingSmallData(List<Users> batchToSave) {
//        int subBatchSize = batchSize / 10; // 分成10份
//        for (int i = 0; i < batchToSave.size(); i += subBatchSize) {
//            int end = Math.min(i + subBatchSize, batchToSave.size());
//            List<Users> subBatch = batchToSave.subList(i, end);
//            ThreadPoolManager.submitTask(() -> dynamicDataSplitterService.saveBatch(new ArrayList<>(subBatch)));
//        }
//    }
//
//
//}
